package cn.tedu.bonfire.front.content.service;

import cn.tedu.bonfire.common.consts.data.ContentConsts;
import cn.tedu.bonfire.common.pojo.authentication.CurrentPrincipal;
import cn.tedu.bonfire.common.pojo.vo.PageData;
import cn.tedu.bonfire.front.content.pojo.dto.ArticleAddNewDto;
import cn.tedu.bonfire.front.content.pojo.dto.UpdateArticleRequestDto;
import cn.tedu.bonfire.front.content.pojo.vo.*;
import org.springframework.data.domain.Page;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;


public interface IArticleService  extends ContentConsts {
    /**
     * 发布文章
     *
     * @param currentPrincipal   当事人
     * @param remoteAddr         IP地址
     * @param articleAddNewDto 新的文章数据
     */
    void addNew(CurrentPrincipal currentPrincipal, String remoteAddr,ArticleAddNewDto articleAddNewDto);
    void updateViewById(Long id);
    /**
     * 根据ID查询文章
     *
     */
    ArticleStandardVO getStandardById(Long id);

    /**
     * 根据ID删除文章
     *
     * @param id 尝试删除的文章数据的ID
     */
    void deleteById(Long id);

    /**
     * 根据类别查询文章列表，将使用默认的每页记录数
     *
     * @param categoryId 文章类别的ID
     * @param
     * @return 文章列表
     */

    /**
     * 根据用户作者id查询文章
     *
     *
     */
    List<UserCollectListVO> selectMyArticle(Long userId);

    /**
     * 根据点赞查询文章进行排序*/
    List<UserCollectListVO> getIsrecommend();
    /**
     * 根据用户id查询点赞文章
     *
     *
     */
    List<UserCollectListVO> selectLike(Long authorId);
    /**
     * 根据用户id查询收藏文章
     *
     *
     */
    List<UserCollectListVO> selectCollect(Long authorId);

    ArticleAuthorVO getAuthorByArticleId(Long id);

    PageData<ArticleListItemVO> listByCategory(Long categoryId, Integer isRecommend);

    /**
     *
     * @param categoryId 文章类别的ID
     * @return 文章列表
     */
    PageData<ArticleListItemVO> listByCategory(Long categoryId,Integer pageNum,Integer pageSize);

    PageData<ArticleListItemVO> listByRecommend();


    //PageData<ArticleListItemVO> listByHot();


    int updateArticle(CurrentPrincipal currentPrincipal, UpdateArticleRequestDto updateArticleRequestDto);

    PageData<UserDraftListVO> selectdraft(Long userId, Integer pageNum, Integer pageSize);

    List<UserCollectListVO> selectMyAuditArticle(Long userId);

    UserDraftListVO selectDraftDetail(Long authorId, Long articleId);
    Long selectUserArticles(Long userId);

    Long selectUserLikes(Long userId);

    Long selectUserViews(Long userId);

    Long selectUserCollect(Long userId);
}
